package bme.andraskindler.treenventory.fragment;

import java.util.List;

import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v4.app.ListFragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import bme.andraskindler.treenventory.R;
import bme.andraskindler.treenventory.model.TreeData;
import bme.andraskindler.treenventory.provider.RestManager;
import bme.andraskindler.treenventory.provider.SyncListAdapter;
import bme.andraskindler.treenventory.provider.TreenventoryDataSource;

/**
 * A mérési adatok szinkronizálására szolgáló fragment, szülője a SynchronizeActivity.
 * Az elemeket egy listában jeleníti meg, a start gombra kattintva mindegyikhez egy AsyncTask leszármazott példányt hoz létre és indít el. Jobb felül megjeleníti, hogy mennyi elem van még hátra.
 * @author andraskindler
 *
 */
public class SyncFragment extends ListFragment {

	@Override
	public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
		final View root = inflater.inflate(R.layout.fragment_sync, container, false);

		setListAdapter(new SyncListAdapter());

		TextView.class.cast(root.findViewById(R.id.tv_sync_remaining)).setText("Hátralévő elemek száma: " + TreenventoryDataSource.getAllTrees().size());

		final ImageView button = ImageView.class.cast(root.findViewById(R.id.iv_sync_pauseresume));
		button.setOnClickListener(new OnClickListener() {

			public void onClick(View v) {
				button.setSelected(!button.isSelected());
				List<TreeData> data = TreenventoryDataSource.getAllTrees();
				for (int i = 0; i < data.size(); i++) {
					final TreeData treeData = data.get(i);

					AsyncTask<Void, Void, Integer> task = new AsyncTask<Void, Void, Integer>() {

						@Override
						protected Integer doInBackground(Void... params) {
							return RestManager.postTree(treeData);
						}

						@Override
						protected void onPostExecute(Integer result) {
							super.onPostExecute(result);
							if (result == 200) {
								TreenventoryDataSource.deleteTree(treeData);
								BaseAdapter.class.cast(getListAdapter()).notifyDataSetChanged();
								TextView.class.cast(root.findViewById(R.id.tv_sync_remaining)).setText("Hátralévő elemek száma: " + TreenventoryDataSource.getAllTrees().size());
							}
						}

					};

					task.execute();
				}
			}
		});

		return root;
	}
}
